package cn.trinea.android.demo;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.trinea.android.common.util.ToastUtils;
import cn.trinea.android.demo.MyService.MyBinder;

/**
 * ServiceDemo, incluse start service, bind service and intent service
 * 
 * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2013-5-9
 */
public class ServiceDemo extends BaseActivity {

	private MyService myService;
	private Intent myServiceIntent;
	private Intent myAIDLServiceIntent;
	private Intent myIntentServiceIntent;
	private Intent myIntentService2Intent;

	private Button startServiceBtn;
	private Button stopServiceBtn;
	private Button startIntentServiceBtn;

	private Button boundServiceBtn;
	private Button operateBoundServiceBtn;
	private Button getBoundServiceProBtn;
	private Button unboundServiceBtn;

	private Button startAIDLServiceBtn;
	private Button stopAIDLServiceBtn;

	private ServiceConnection con = new ServiceConnection() {

		/**
		 * Called when a connection to the Service has been lost
		 */
		@Override
		public void onServiceDisconnected(ComponentName name) {
			Toast.makeText(context, "Service disconnect", Toast.LENGTH_SHORT).show();
		}

		/**
		 * Called when a connection to the Service has been established,
		 */
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			myService = ((MyBinder) service).getService();
			Toast.makeText(context, "Service Connect", Toast.LENGTH_SHORT).show();
		}
	};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState, R.layout.service_demo);

		myServiceIntent = new Intent(this, MyService.class);
		myAIDLServiceIntent = new Intent(ServiceDemo.this, MyAIDLService.class);
		myIntentServiceIntent = new Intent(ServiceDemo.this, MyIntentService.class);
		myIntentService2Intent = new Intent(ServiceDemo.this, MyIntentService.class);

		startServiceBtn = (Button) findViewById(R.id.start_general_service);
		startServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startService(myServiceIntent);
			}
		});

		stopServiceBtn = (Button) findViewById(R.id.stop_general_service);
		stopServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				stopService(myServiceIntent);
			}
		});

		startIntentServiceBtn = (Button) findViewById(R.id.start_intent_service);
		startIntentServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startService(myIntentServiceIntent);
				startService(myIntentService2Intent);
			}
		});

		boundServiceBtn = (Button) findViewById(R.id.bound_service);
		boundServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				bindService(myServiceIntent, con, Context.BIND_AUTO_CREATE);
			}
		});

		operateBoundServiceBtn = (Button) findViewById(R.id.operate_bound_service);
		operateBoundServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (myService != null) {
					ToastUtils.show(context, R.string.operate_value_success, Integer.toString(myService.increaseCount()));
				} else {
					ToastUtils.show(context, R.string.bind_service_tip, Toast.LENGTH_SHORT);
				}
			}
		});

		getBoundServiceProBtn = (Button) findViewById(R.id.get_bound_service_pro);
		getBoundServiceProBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (myService != null) {
					ToastUtils.show(context, R.string.operate_value_tip, Integer.toString(myService.getCount()));
				} else {
					ToastUtils.show(context, R.string.bind_service_tip, Toast.LENGTH_SHORT);
				}
			}
		});

		unboundServiceBtn = (Button) findViewById(R.id.unbound_service);
		unboundServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				if (myService != null) {
					unbindService(con);
					myService = null;
				}
			}
		});

		startAIDLServiceBtn = (Button) findViewById(R.id.start_aidl_service);
		startAIDLServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startService(myAIDLServiceIntent);
			}
		});

		stopAIDLServiceBtn = (Button) findViewById(R.id.stop_aidl_service);
		stopAIDLServiceBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				stopService(myAIDLServiceIntent);
			}
		});
	}

	@Override
	public void onPause() {
		super.onPause();
	}

	@Override
	public void onResume() {
		super.onResume();
	}
}
